#!/usr/bin/env python
# -*- coding: utf-8 -*-

from win32com.client import Dispatch
from sys import argv, exit
from os.path import dirname, join
import messagesV2

Excel = Dispatch('Excel.Application')

"""
Ce script parcours une colonne d'une feuille d'un classeur
Excel et retourne les valeurs des cellules.

Il nécessite une machine Windows avec Excel installé.

"""

class Traitement():
    def __init__(self):
        self.quiet = False
        self.destinataires = []
        self.subject = "test"
        self.body = "test"

    def setQuiet(self):
        self.quiet = True

    def start(self, classeur, feuille="active", colonne="A"):
        try:
            self.classeur = Excel.Workbooks.Open(classeur)
        except:
            self.erreur(1, classeur)
        try:
            if feuille != "active":
                self.feuille = self.classeur.Worksheets.Activate(feuille)
            self.feuille = self.classeur.ActiveSheet
        except:
            self.erreur(2, feuille)
        try:
            self.colonne = self.feuille.Columns(colonne)
        except:
            self.erreur(3, colonne)
        return(0)

    def action(self, action="afficher"):
        count = 0
        for cellule in self.colonne.Value:
            if cellule[0] != None:
                count = count + 1
                try:
                    contenu = str(cellule[0])
                except:
                    self.erreur(4, count)
                if action == "afficher":
                    try:
                        print(str(count) + " : " + str(cellule[0]))
                    except:
                        self.erreur(5)
                if action == "envoyer":
                    try:
                        self.destinataires.append(str(cellule[0]))
                    except:
                        self.erreur(6)
        if action == "envoyer":
            self.envoi()
        self.erreur(0)

    def envoi(self, destinataires):
        msg = messagesV2.message()
        msg.logFile = "C:\messageLOG.txt"
        msg.smtp_from = "alexandre.laugt@elvetec.fr"
        msg.smtp_host = "elvenet"
        msg.smtp_to = self.destinataires
        retour = msg.send(self.subject, self.body)
        self.quit(1000)

    def erreur(self, code, valeur1="default"):
        erreurs = {0: "Tout est OK, fichier traité",
                   1: "Impossible d'ouvrir le classeur " + valeur1 + ".",
                   2: "Impossible d'ouvrir la feuille " + valeur1 + ".",
                   3: "Impossible d'ouvrir la colonne " + valeur1 + ".",
                   4: "Impossible d'ouvrir la cellule " + valeur1 + ".",
                   5: "Impossible d'afficher la cellule " + valeur1 + ".",
                   6: "Impossible d'envoyer la cellule " + valeur1 + ".",
                   }
        if self.quiet == False:
            print(erreurs.get(code))
        self.quit(code)

    def quit(self, code=0):
        if hasattr(self, 'classeur'):
            self.classeur.Close(False)
        print("fin du programme")
        print("code de retour : " + str(code))
        exit(code)

if __name__ == '__main__':
    traitement = Traitement()
    traitement.start("C:\Classeur1.xls", "active", "D")
    traitement.action("envoyer")
    traitement.quit()